<!doctype html>
<html lang="zh-cn">
  <head>
    <title>Python--异常和模块 // JW Blog</title>
    <meta charset="utf-8" />
    <meta name="generator" content="Hugo 0.60.1" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <meta name="author" content="John Doe" />
    <meta name="description" content="" />
    <link rel="stylesheet" href="https://duyi111.gitee.io/css/main.min.f90f5edd436ec7b74ad05479a05705770306911f721193e7845948fb07fe1335.css" />

    
    <meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="Python--异常和模块"/>
<meta name="twitter:description" content="1.异常介绍  错误(导致程序终止)  语法错误  不符合python的语法规范   异常  符合python的语法规范,但是不符合python的运行机制     总结:  对那些可能会发生异常的代码,进行异常捕获,保证用户体验和程序的健壮性    1.1 捕获单个异常类型  格式 try: 执行可能会发生异常的代码 except 异常类型: 如果发生了异常,将执行的代码  FileNotFoundError: [Errno 2] No such file or directory: &lsquo;hm.txt&rsquo; 异常类型: 异常的信息描述  1.2 捕获多个异常类型  格式:  同时捕获多个异常,如果发生异常而且捕获到了,处理方式一样 try: 执行可能会发生异常类型1的代码 执行可能会发生异常类型2的代码 ... except (异常类型1, 异常类型2, ...): 如果发生了异常,将执行的代码  同时捕获多个异常,如果发生异常而且捕获到了,每种异常的处理方式不同 try: 执行可能会发生异常类型1的代码 执行可能会发生异常类型2的代码 ... except 异常类型1: 如果发生了异常,将执行的代码 except 异常类型2: 如果发生了异常,将执行的代码 ."/>

    <meta property="og:title" content="Python--异常和模块" />
<meta property="og:description" content="1.异常介绍  错误(导致程序终止)  语法错误  不符合python的语法规范   异常  符合python的语法规范,但是不符合python的运行机制     总结:  对那些可能会发生异常的代码,进行异常捕获,保证用户体验和程序的健壮性    1.1 捕获单个异常类型  格式 try: 执行可能会发生异常的代码 except 异常类型: 如果发生了异常,将执行的代码  FileNotFoundError: [Errno 2] No such file or directory: &lsquo;hm.txt&rsquo; 异常类型: 异常的信息描述  1.2 捕获多个异常类型  格式:  同时捕获多个异常,如果发生异常而且捕获到了,处理方式一样 try: 执行可能会发生异常类型1的代码 执行可能会发生异常类型2的代码 ... except (异常类型1, 异常类型2, ...): 如果发生了异常,将执行的代码  同时捕获多个异常,如果发生异常而且捕获到了,每种异常的处理方式不同 try: 执行可能会发生异常类型1的代码 执行可能会发生异常类型2的代码 ... except 异常类型1: 如果发生了异常,将执行的代码 except 异常类型2: 如果发生了异常,将执行的代码 ." />
<meta property="og:type" content="article" />
<meta property="og:url" content="https://duyi111.gitee.io/post/%E5%BC%82%E5%B8%B8%E5%92%8C%E6%A8%A1%E5%9D%97/" />
<meta property="article:published_time" content="2020-01-11T21:56:34+08:00" />
<meta property="article:modified_time" content="2020-01-11T21:56:34+08:00" />


  </head>
  <body>
    <header class="app-header">
      <a href="https://duyi111.gitee.io/"><img class="app-header-avatar" src="/avatar.jpg" alt="John Doe" /></a>
      <h1>JW Blog</h1>
      <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc vehicula turpis sit amet elit pretium.</p>
      <div class="app-header-social">
        
      </div>
    </header>
    <main class="app-container">
      
  <article class="post">
    <header class="post-header">
      <h1 class ="post-title">Python--异常和模块</h1>
      <div class="post-meta">
        <div>
          <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="icon icon-calendar">
  <title>calendar</title>
  <rect x="3" y="4" width="18" height="18" rx="2" ry="2"></rect><line x1="16" y1="2" x2="16" y2="6"></line><line x1="8" y1="2" x2="8" y2="6"></line><line x1="3" y1="10" x2="21" y2="10"></line>
</svg>
          Jan 11, 2020
        </div>
        <div>
          <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="icon icon-clock">
  <title>clock</title>
  <circle cx="12" cy="12" r="10"></circle><polyline points="12 6 12 12 16 14"></polyline>
</svg>
          2 min read
        </div></div>
    </header>
    <div class="post-content">
      <h2 id="1">1.异常介绍</h2>
<ul>
<li>错误(导致程序终止)
<ul>
<li>语法错误
<ul>
<li>不符合python的语法规范</li>
</ul>
</li>
<li>异常
<ul>
<li>符合python的语法规范,但是不符合python的运行机制</li>
</ul>
</li>
</ul>
</li>
<li>总结:
<ul>
<li>对那些可能会发生异常的代码,进行异常捕获,保证用户体验和程序的健壮性</li>
</ul>
</li>
</ul>
<h3 id="11-">1.1 捕获单个异常类型</h3>
<ul>
<li>格式
<pre><code>try:
    执行可能会发生异常的代码
except 异常类型:
    如果发生了异常,将执行的代码
</code></pre></li>
<li>FileNotFoundError: [Errno 2] No such file or directory: &lsquo;hm.txt&rsquo;</li>
<li>异常类型: 异常的信息描述</li>
</ul>
<h3 id="12-">1.2 捕获多个异常类型</h3>
<ul>
<li>格式:
<ul>
<li>同时捕获多个异常,如果发生异常而且捕获到了,处理方式一样
<pre><code>try:
    执行可能会发生异常类型1的代码
    执行可能会发生异常类型2的代码
    ...
except (异常类型1, 异常类型2, ...):
    如果发生了异常,将执行的代码
</code></pre></li>
<li>同时捕获多个异常,如果发生异常而且捕获到了,每种异常的处理方式不同
<pre><code>try:
    执行可能会发生异常类型1的代码
    执行可能会发生异常类型2的代码
    ...
except 异常类型1:
    如果发生了异常,将执行的代码
except 异常类型2:
    如果发生了异常,将执行的代码
...
</code></pre></li>
</ul>
</li>
</ul>
<h3 id="13-">1.3 捕获未知类型异常</h3>
<ul>
<li>格式
<pre><code>try:
    执行可能会发生异常的代码
except Exception:
    # Exception为所有异常类的父类
    如果发生异常执行的代码
  
# 简写
try: 
    执行可能会发生异常的代码
except:
    如果发生异常执行的代码
</code></pre></li>
</ul>
<h2 id="2">2.获取异常的信息描述</h2>
<ul>
<li>单个异常
<pre><code>try:
    执行可能会发生异常的代码
except 异常类型 as 临时变量:
    如果发生了异常,将执行的代码
</code></pre></li>
<li>多个异常
<pre><code>try:
    执行可能会发生异常类型1的代码
    执行可能会发生异常类型2的代码
    ...
except (异常类型1, 异常类型2, ...) as 临时变量:
    如果发生了异常,将执行的代码
</code></pre></li>
<li>未知异常
<pre><code>try:
执行可能会发生异常的代码
except Exception as 临时变量:
如果发生异常执行的代码
</code></pre></li>
</ul>
<h2 id="3">3.异常捕获完整语法</h2>
<ul>
<li>try
<ul>
<li>试着执行可能会发生异常的多行代码</li>
</ul>
</li>
<li>except(可以有多个)
<ul>
<li>如果捕获到了异常会进入</li>
</ul>
</li>
<li>else
<ul>
<li>如果没有捕获到异常,代码正常执行完成会进入</li>
</ul>
</li>
<li>finally
<ul>
<li>如果没有发生异常</li>
<li>如果发生了异常并且捕获到了</li>
<li>如果发生了异常但是没有捕获到</li>
</ul>
</li>
</ul>
<h2 id="4">4.异常的传递</h2>
<ul>
<li>python中的异常是可以传递,因为可以传递,程序员可以简化其代码</li>
<li>类型
<ul>
<li>函数的嵌套调用</li>
<li>try嵌套</li>
</ul>
</li>
</ul>
<h2 id="5">5.抛出自定义异常</h2>
<pre><code># 自定义异常类(年龄错误)
class AgeError(Exception):

    def __init__(self, age):
        self.__age = age

    # 异常的信息描述
    def __str__(self):
        return '您输入的年龄%d不合法, 合法的范围应该为是(0, 150]' % self.__age


# 需求: 创建一个人 -&gt; 名字 年龄((0, 150]])
# 自定义人类
class Person(object):

    def __init__(self, name, age):

        # 判断 age 是否合法(0, 150]
        if age &gt; 0 and age &lt;= 150:
            self.name = name
            self.age = age
        else:
            # print('您输入的年龄%d不合法, 合法的范围应该为是(0, 150]' % age)
            # 抛出自定义异常(对象)
            # raise 
            ae = AgeError(age)
            raise ae

xm = Person('小明', 300)
</code></pre><h2 id="6">6.模块介绍</h2>
<ul>
<li>概念:
<ul>
<li>一类具有相关性的全局变量,函数,类封装到了一个文件中</li>
</ul>
</li>
</ul>
<h3 id="61-">6.1. 模块导入</h3>
<ul>
<li>import 模块名1, 模块名2
<ul>
<li>全部导入</li>
</ul>
</li>
<li>from 模块名 import 成员名(全局变量, 函数, 类)
<ul>
<li>选择性导入</li>
</ul>
</li>
<li>from 模块名 import *
<ul>
<li>全部导入</li>
</ul>
</li>
</ul>
<h3 id="62-as">6.2 as的作用</h3>
<ul>
<li>可以对模块, 全局变量, 函数, 类进行重命名(起别名)操作</li>
</ul>
<h3 id="63-">6.3 模块原则</h3>
<pre><code># 1. 如果被导入的话, 这个main()不能被执行 (__name__ =  hm_hm)
# 2. 如果是设计者自测代码的时候, 这个main()需要被执行 (__name__ = __main__)

if __name__ == '__main__':
    main()
</code></pre><h3 id="64-all">6.4 模块中的__all__</h3>
<ul>
<li>作用:
<ul>
<li>模块中的__all__配合<code>from 模块名 import *</code> 使用完成选择性导入</li>
</ul>
</li>
</ul>
<h2 id="7">7.包</h2>
<ul>
<li>import 包名.模块名</li>
<li>from 包名 import 模块名</li>
<li>from 包名 import *
<ul>
<li>默认无法使用包中模块</li>
<li>需要包中的__init__.py文件中的__all__配合才可以导入成功</li>
</ul>
</li>
</ul>

    </div>
    <div class="post-footer">
      
    </div>
  </article>

    </main>
  </body>
</html>
